import enums.LogLevel;
import factory.LoggerFactory;
import factory.impl.ConsoleLoggerFactory;
import factory.impl.DatabaseLoggerFactory;
import factory.impl.FileLoggerFactory;

/**
 * 客户端代码 - 演示工厂方法模式的使用
 */
public class LoggerClient {
    public static void main(String[] args) {
        // 创建不同的日志工厂
        LoggerFactory fileLoggerFactory = new FileLoggerFactory("/var/log/app.log");
        LoggerFactory dbLoggerFactory = new DatabaseLoggerFactory("jdbc:mysql://localhost:3306/logs");
        LoggerFactory consoleLoggerFactory = new ConsoleLoggerFactory();
        
        System.out.println("=== 文件日志记录 ===");
        fileLoggerFactory.log("这是一个文件日志消息");
        fileLoggerFactory.log("这是一个错误消息", LogLevel.ERROR);
        
        System.out.println("\n=== 数据库日志记录 ===");
        dbLoggerFactory.log("这是一个数据库日志消息");
        dbLoggerFactory.log("这是一个警告消息", LogLevel.WARN);
        
        System.out.println("\n=== 控制台日志记录 ===");
        consoleLoggerFactory.log("这是一个控制台日志消息");
        consoleLoggerFactory.log("这是一个调试消息", LogLevel.DEBUG);
        
        // 动态切换日志记录器
        System.out.println("\n=== 动态切换日志记录器 ===");
        useLogger(fileLoggerFactory);
        useLogger(consoleLoggerFactory);
    }
    
    /**
     * 使用工厂方法创建并记录日志
     * @param factory 日志工厂
     */
    public static void useLogger(LoggerFactory factory) {
        factory.log("通过工厂方法创建的日志记录器记录的消息");
    }
}